package com.zmn.plat.business.interfaces.channel;

import java.util.List;

import com.zmn.common.dto.AreaDTO;
import com.zmn.common.dto.VtDTO;
import com.zmn.plat.common.dto.category.CategoryDRO;
import com.zmn.plat.common.dto.category.CategoryInfoDRO;
import com.zmn.plat.common.dto.channel.category.ChannelCategorySimpleSpellDIO;
import com.zmn.plat.common.dto.channel.category.ChannelCategorySimpleSpellDRO;
import com.zmn.plat.common.dto.servcategory.ServCategoryDRO;
import com.zmn.plat.model.entity.category.CategoryInfoDTO;
import com.zmn.plat.model.entity.category.ServCategAndCategTwoQuery;

/**
 * 描述:ChannelTypeBService
 *
 * @author tanghongjun
 * @since: 2018/10/16 17:56
 */
public interface ChannelCategBService {

    /**
     * 根据渠道ID,城市查询渠道城市开通的服务分类和二级产品分类集合 如果渠道城市没有配置，则返回渠道开通的服务分类和二级产品分类集合 如果渠道也没有配置，则返回空集合
     *
     * @param channelId
     *            渠道ID
     * @param showType
     *            产品分类 1后台 2前台
     * @return list list
     */
    List<ServCategAndCategTwoQuery> listServCategAndCategTwoQueryByChannelIdAndShowType(Integer channelId, Integer cityId, Integer showType);

    /**
     * 根据渠道ID查询服务分类
     *
     * @param channelId
     *            渠道ID
     * @param showType
     *            产品分类 1后台 2前台
     * @return
     */
    List<ServCategoryDRO> listServCategoryByChannelId(Integer channelId, Integer showType);

    /**
     * 根据渠道ID和服务分类ID查询一级产品分类
     * @param channelId   渠道ID
     * @param showType    前后台类型：1后台 2前台
     * @param servCategId 服务分类ID
     * @return
     */
    List<CategoryDRO> listCategoryOneByChannelIdAndServCategId(Integer channelId, Integer showType, Integer servCategId);

    /**
     * 根据渠道ID和产品一级分类ID查询二级产品分类
     * @param channelId    渠道ID
     * @param showType     前后台类型：1后台 2前台
     * @param categOneId   产品一级分类ID
     * @return
     */
    List<CategoryInfoDRO> listCategoryByChannelIdAndCategOneId(Integer channelId, Integer showType, Integer categOneId);

    /**
     * 获取渠道开通的二级分类列表
     *
     * @param channelId
     *            the channel id
     * @param showType
     *            产品分类 1后台 2前台
     * @param servCategId
     *            the serv categ id
     * @return
     */
    List<CategoryInfoDRO> listCategoryByChannelIdAndServCategId(Integer channelId, Integer showType, Integer servCategId);

    /**
     * 根据渠道id，服务分类id，一级分类id，二级分类id集合，查询已经开通的二级分类id
     *
     * @param channelId
     *            渠道id
     * @param servCategId
     *            服务分类id
     * @param categIds
     *            二级分类id集合
     * @return
     */
    List<Integer> listCategIdByChannelIdAndServCategIdAndCategIds(Integer channelId, Integer servCategId, List<Integer> categIds);

    /**
     * 根据渠道ID查询前台一级产品分类、二级产品分类
     * @param channelId  渠道ID
     * @return
     */
    List<CategoryInfoDRO> listShowCategByChannelId(Integer channelId);

    /**
     * 通过渠道ID,城市ID获取服务区域下已开通的服务分类列表
     * @param channelId  渠道ID
     * @param showType   前后台类型 1后台 2前台
     * @param cityId     城市ID
     * @return
     */
    List<ServCategoryDRO> listServCategoryByChannelIdAndCityId(Integer channelId, Integer showType, Integer cityId);

    /**
     * 通过渠道ID,城市ID，分类简称获取服务区域下已开通的分类列表
     * @param channelCategorySimpleSpellDIO  入参
     * @return
     */
    List<ChannelCategorySimpleSpellDRO> listCategoryByChannelIdAndCityIdAndSimpleSpell(ChannelCategorySimpleSpellDIO channelCategorySimpleSpellDIO);

    /**
     * 通过渠道ID,城市ID,服务分类ID获取服务区域下已开通的二级分类列表
     * @param channelId    渠道ID
     * @param showType     前后台类型 1后台 2前台
     * @param cityId       城市ID
     * @param servCategId  服务分类ID
     */
    List<CategoryInfoDTO> listCategoryByChannelIdAndCityIdAndServCategId(Integer channelId, Integer showType, Integer cityId, Integer servCategId);

    /**
     * 通过渠道ID,城市ID,服务分类ID集合获取服务区域下已开通的二级分类列表
     * @param channelId    渠道ID
     * @param showType     前后台类型 1后台 2前台
     * @param cityId       城市ID
     * @param servCategIds 服务分类ID集合
     */
    List<CategoryInfoDTO> listCategoryByChannelIdAndCityIdAndServCategIds(Integer channelId, Integer showType, Integer cityId, List<Integer> servCategIds);

    /**
     * 通过渠道ID获取服务区域下开通的城市
     * @param channelId
     * @param showType
     * @return
     */
    List<AreaDTO> listAreaByChannelId(Integer channelId, Integer showType);

    /**
     * 通过渠道ID,服务分类ID获取服务区域下开通的城市
     * @param channelId    渠道ID
     * @param showType     前后台类型：1后台 2前台
     * @param servCategId  服务分类ID
     * @return
     */
    List<AreaDTO> listAreaByChannelIdAndServCategId(Integer channelId, Integer showType, Integer servCategId);

    /**
     * 通过渠道ID,城市ID获取服务区域下开通的前台产品id
     * @param channelId    渠道ID
     * @param cityId     前后台类型：1后台 2前台
     * @return
     */
    List<Integer> listChannelShowProductsByChannelIdAndCityId(Integer channelId, Integer cityId);

    /**
     * 通过渠道ID,区县ID获取服务区域下开通的服务分类
     *
     * @param channelId
     *            渠道ID
     * @param cityId
     *            城市id
     * @param countyId
     *            区县id
     * @return
     */
    List<VtDTO> listServCategoryByChannelIdAndAreaId(Integer channelId, Integer cityId,Integer countyId);

    /**
     * 通过渠道ID,区县ID获取服务区域下开通的服务分类
     *
     * @param channelId
     *            渠道ID
     * @param countyId
     *            区县id
     * @param servCategId
     *            服务分类id
     * @return
     */
    List<VtDTO> listProductByChannelIdAndAreaIdAndServCategId(Integer channelId, Integer cityId,Integer countyId, Integer servCategId);


    /**
     * 通过渠道ID,城市id，区县ID获取区域下开通的分类集合，优先区县，其次城市（区域未配置，分类以去掉为准）
     *
     * @param channelId
     *            渠道ID
     * @param countyId
     *            区县id
     * @param cityId
     *            城市id
     * @return
     */
    List<ServCategAndCategTwoQuery> listCategoriesByCityIdAndCountyId(Integer channelId, Integer cityId, Integer countyId);
}
